/* eslint-disable*/
export default {
  bind(el, binding, vnode) {
    let p = 0
    let t = 0
    let down = true
    const selectWrap = el.querySelector('.el-table__body-wrapper')
    selectWrap.addEventListener('scroll', debounce(function() {
	  // 判断是否向下滚动
	  p = this.scrollTop
	  if (t < p) {
        down = true
	  } else {
        down = false
	  }
	  t = p
	  // 判断是否到底
	  const sign = 1
	  const scrollDistance = this.scrollHeight - this.scrollTop - this.clientHeight
	  if (scrollDistance <= sign && down) {
        binding.value()
	  }
    }), 20)
  }
}

function debounce(func, wait, immediate) {
  let timeout, args, context, timestamp, result
  const later = function() {
    // 据上一次触发时间间隔
    const last = +new Date() - timestamp
    // 上次被包装函数被调用时间间隔 last 小于设定时间间隔 wait
    if (last < wait && last > 0) {
	  timeout = setTimeout(later, wait - last)
    } else {
	  timeout = null
	  // 如果设定为immediate===true，因为开始边界已经调用过了此处无需调用
	  if (!immediate) {
        result = func.apply(context, args)
        if (!timeout) context = args = null
	  }
    }
  }
  return function(...args) {
    context = this
    timestamp = +new Date()
    const callNow = immediate && !timeout
    // 如果延时不存在，重新设定延时
    if (!timeout) timeout = setTimeout(later, wait)
    if (callNow) {
	  result = func.apply(context, args)
	  context = args = null
    }
    return result
  }
}
